package com.idc.resource.controller;

import com.idc.resource.dal.dto.TBasicCityCode;
import com.idc.resource.enums.ErrorCodeEnum;
import com.idc.resource.exception.IdcServiceException;
import com.idc.resource.model.CityReqDto;
import com.idc.resource.service.CityService;
import com.idc.resource.util.LogUtil;
import com.idc.resource.util.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 基础城市信息
 * Created by Lijing on 2017/7/13.
 */
@Slf4j
@RestController
@RequestMapping(value = "/city")
public class CityController {

    /** 城市服务 */
    @Autowired
    private CityService cityService;

    /**
     * 获取省份信息
     * @param cityReqDto 请求参数
     * @return 省份信息
     */
    @RequestMapping(value = "/provinces", method = RequestMethod.POST)
    public Result<List<TBasicCityCode>> provinces(@RequestBody CityReqDto cityReqDto){
        try {
            LogUtil.updateLogId(null);
            log.error("收到一个省份信息查询请求,请求参数:{}",cityReqDto);
            return  new Result<>(cityService.getProvinces(cityReqDto));
        }catch (IdcServiceException ise){
            log.error("省份信息查询请求失败，原因:{}",ise.getMessage());
            return  new Result<>(ise.getCode(),ise.getMessage());
        }catch (Exception e){
            log.error("省份信息查询请求时系统异常，原因:",e);
            return new Result<>(ErrorCodeEnum.SYSTEM_ERROR.getCode(),ErrorCodeEnum.SYSTEM_ERROR.getDesc());
        }
    }

    /**
     * 获取城市信息
     * @param cityReqDto 请求参数
     * @return 城市信息
     */
    @RequestMapping(value = "/cities", method = RequestMethod.POST)
    public Result<List<TBasicCityCode>> cities(@RequestBody CityReqDto cityReqDto){
        try {
            LogUtil.updateLogId(null);
            log.error("收到一个城市信息查询请求,请求参数:{}",cityReqDto);
            return  new Result<>(cityService.getCities(cityReqDto));
        }catch (IdcServiceException ise){
            log.error("城市信息查询请求失败，原因:{}",ise.getMessage());
            return  new Result<>(ise.getCode(),ise.getMessage());
        }catch (Exception e){
            log.error("城市信息查询请求时系统异常，原因:",e);
            return new Result<>(ErrorCodeEnum.SYSTEM_ERROR.getCode(),ErrorCodeEnum.SYSTEM_ERROR.getDesc());
        }
    }

    /**
     * 获取地市信息
     * @param cityReqDto 请求参数
     * @return 地市信息
     */
    @RequestMapping(value = "/counties", method = RequestMethod.POST)
    public Result<List<TBasicCityCode>> counties(@RequestBody CityReqDto cityReqDto){
        try {
            LogUtil.updateLogId(null);
            log.error("收到一个地市信息查询请求,请求参数:{}",cityReqDto);
            return  new Result<>(cityService.getCounties(cityReqDto));
        }catch (IdcServiceException ise){
            log.error("地市信息查询请求失败，原因:{}",ise.getMessage());
            return  new Result<>(ise.getCode(),ise.getMessage());
        }catch (Exception e){
            log.error("地市信息查询请求时系统异常，原因:",e);
            return new Result<>(ErrorCodeEnum.SYSTEM_ERROR.getCode(),ErrorCodeEnum.SYSTEM_ERROR.getDesc());
        }
    }
}
